/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SessionBeans;

import entity.Auto;
import entity.AutoServicio;
import entity.InstanciaAutoServicio;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

/**
 *
 * @author javier
 */
@Stateless
public class InstanciaAutoServicioFacade extends AbstractFacade<InstanciaAutoServicio> {
    @PersistenceContext(unitName = "Agencia_de_Turismo_ASPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public InstanciaAutoServicioFacade() {
        super(InstanciaAutoServicio.class);
    }
    
    public List<InstanciaAutoServicio> obtenerInstanciasXServicio(AutoServicio autoServicio, Date fechaInicio, Date fechaFin ) {
       TypedQuery<InstanciaAutoServicio> q = em.createQuery("SELECT iAS "
                                                          + "FROM InstanciaAutoServicio iAS "
                                                          + "WHERE ((iAS.fechaInicio BETWEEN : fechaInicio AND :fechaFin) OR (:fechaInicio BETWEEN iAS.fechaInicio AND iAS.fechaFin)) " 
                                                          + "AND iAS.autoServicio = :autoServicio", InstanciaAutoServicio.class);    
       q.setParameter("fechaInicio",fechaInicio);
       q.setParameter("fechaFin", fechaFin);
       q.setParameter("autoServicio", autoServicio);
       return q.getResultList();                                                                     
    }
    
    public List<Auto> obtenerDisponibilidadAuto(AutoServicio autoServicio,Date  fechaInicio, Date fechaFin){
        List<Auto> resultado = autoServicio.getAutos();
        for(Iterator<InstanciaAutoServicio> it = this.obtenerInstanciasXServicio(autoServicio, fechaInicio, fechaFin).iterator();it.hasNext();){
            Auto aut = it.next().getAuto();
            resultado.remove(aut);
        }
        return resultado;
        
    }
    
}
